﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using SGAEntidades;
using SGABDUtil;
using SGAInterfaces;

namespace SGAAccesoDatos
{
    public class HojaRutaDetalle : IHojaRutaDetalle
    {
        #region Miembros de IHojaRutaDetalle

        public bool Registrar(HojaRutaDetalleInfo oHojaRutaDetalle, SqlTransaction trx)
        {
            Boolean bExito = false;
            var sqlParm = new SqlParameter[10];

            try
            {
                sqlParm[0] = new SqlParameter("@Id_Hoja_Ruta", SqlDbType.VarChar);
                if (oHojaRutaDetalle.IdHojaRuta != null)
                {
                    sqlParm[0].Value = oHojaRutaDetalle.IdHojaRuta;
                }
                else
                {
                    sqlParm[0].Value = DBNull.Value;
                }

                sqlParm[1] = new SqlParameter("@Item", SqlDbType.Int);
                if (oHojaRutaDetalle.Item.HasValue)
                {
                    sqlParm[1].Value = oHojaRutaDetalle.Item;
                }
                else
                {
                    sqlParm[1].Value = DBNull.Value;
                }

                sqlParm[2] = new SqlParameter("@Km_Inicial", SqlDbType.Decimal);
                if (oHojaRutaDetalle.KmInicial.HasValue)
                {
                    sqlParm[2].Value = oHojaRutaDetalle.KmInicial;
                }
                else
                {
                    sqlParm[2].Value = DBNull.Value;
                }

                sqlParm[3] = new SqlParameter("@Km_Final", SqlDbType.Decimal);
                if (oHojaRutaDetalle.KmFinal.HasValue)
                {
                    sqlParm[3].Value = oHojaRutaDetalle.KmFinal;
                }
                else
                {
                    sqlParm[3].Value = DBNull.Value;
                }

                sqlParm[4] = new SqlParameter("@Id_Distrito_Origen", SqlDbType.VarChar);
                if (oHojaRutaDetalle.IdDistritoOrigen != null)
                {
                    sqlParm[4].Value = oHojaRutaDetalle.IdDistritoOrigen;
                }
                else
                {
                    sqlParm[4].Value = DBNull.Value;
                }

                sqlParm[5] = new SqlParameter("@Id_Distrito_Destino", SqlDbType.VarChar);
                if (oHojaRutaDetalle.IdDistritoDestino != null)
                {
                    sqlParm[5].Value = oHojaRutaDetalle.IdDistritoDestino;
                }
                else
                {
                    sqlParm[5].Value = DBNull.Value;
                }

                sqlParm[6] = new SqlParameter("@Visita", SqlDbType.VarChar);
                if (oHojaRutaDetalle.Visita != null)
                {
                    sqlParm[6].Value = oHojaRutaDetalle.Visita;
                }
                else
                {
                    sqlParm[6].Value = DBNull.Value;
                }

                sqlParm[7] = new SqlParameter("@Observacion", SqlDbType.VarChar);
                if (oHojaRutaDetalle.Observacion != null)
                {
                    sqlParm[7].Value = oHojaRutaDetalle.Observacion;
                }
                else
                {
                    sqlParm[7].Value = DBNull.Value;
                }

                sqlParm[8] = new SqlParameter("@Uso_Personal", SqlDbType.VarChar);
                if (oHojaRutaDetalle.UsoPersonal != null)
                {
                    sqlParm[8].Value = oHojaRutaDetalle.UsoPersonal;
                }
                else
                {
                    sqlParm[8].Value = DBNull.Value;
                }

                sqlParm[9] = new SqlParameter("@Usuario_Sistema", SqlDbType.VarChar);
                if (oHojaRutaDetalle.UsuarioSistema != null)
                {
                    sqlParm[9].Value = oHojaRutaDetalle.UsuarioSistema;
                }
                else
                {
                    sqlParm[9].Value = DBNull.Value;
                }

                SqlHelper.ExecuteNonQuery(trx, CommandType.StoredProcedure, "SGA_SP_REGISTRAR_HOJA_RUTA_DETALLE", sqlParm);
                bExito = true;
            }
            catch (Exception)
            {
                trx.Rollback();
            }
            return bExito;
        }

        public IList<HojaRutaDetalleInfo> Listar(HojaRutaDetalleInfo oHojaRutaDetalle)
        {
            var sqlParm = new SqlParameter[1];
            var oListaHojaRutaDetalle = new List<HojaRutaDetalleInfo>();

            sqlParm[0] = new SqlParameter("@Id_Hoja_Ruta", SqlDbType.VarChar);
            if (oHojaRutaDetalle.IdHojaRuta != null) { sqlParm[0].Value = oHojaRutaDetalle.IdHojaRuta; } else { sqlParm[0].Value = DBNull.Value; }

            using (
                var drd = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringDistributedTransaction,
                                                  CommandType.StoredProcedure, "SGA_SP_CONSULTAR_HOJA_RUTA_DETALLE", sqlParm))
            {
                if (drd != null)
                {
                    if (drd.HasRows)
                    {
                        while (drd.Read())
                        {
                            oListaHojaRutaDetalle.Add(new HojaRutaDetalleInfo(drd.GetString(0).Trim(),
                                                                              Int32.Parse(drd.GetValue(1).ToString()),
                                                                              Double.Parse(drd.GetValue(2).ToString()),
                                                                              Double.Parse(drd.GetValue(3).ToString()),
                                                                              drd.GetString(4).Trim(), new UbigeoInfo(null, null, drd.GetString(4).Trim(), drd.GetString(5).Trim()), 
                                                                              drd.GetString(6).Trim(), new UbigeoInfo(null, null, drd.GetString(6).Trim(), drd.GetString(7).Trim()),
                                                                              drd.GetString(8).Trim(), drd.GetString(9).Trim(), drd.GetString(10), null
                                                                              ));
                        }
                    }
                }
            }
            return oListaHojaRutaDetalle;
        }

        #endregion
    }
}
